// class Solution {
// public:
//     vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
//         int size = nums1.size();
//         int id1[size], id2[size];
//         for(int i = 0; i < size; i++) id1[i] = id2[i] = i;
//         sort(id1, id1 + size, [&](int l, int r){
//             return nums1[l] < nums1[r];
//         });
//         sort(id2, id2 + size, [&](int l, int r){
//             return nums2[l] < nums2[r];
//         });
//         // for(auto e : id1) cout << nums1[e] << ' '; cout << endl;
//         // for(auto e : id2) cout << nums2[e] << ' '; cout << endl;

//         int l = 0;
//         for(int r = size - 1; r > l; r--)
//         {
//             if(nums1[id1[r]] <= nums2[id2[r]])
//             {
//                 int id_l = id1[0];
//                 for(int i = 1; i < size; i++)
//                     id1[i - 1] = id1[i];
//                 id1[size - 1] = id_l;
//             }
//         }
//         // for(auto e : id1) cout << nums1[e] << ' '; cout << endl;
//         // for(auto e : id2) cout << nums2[e] << ' '; cout << endl;

//         vector<int> ret(size);
//         for(int i = 0; i < size; i++)
//             ret[id2[i]] = nums1[id1[i]];
//         return ret;
//     }
// };
class Solution {
public:
    vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {
        int size = nums1.size();
        sort(nums1.begin(), nums1.end());
        vector<int> id(size);
        for (int i = 0; i < size; i++) id[i] = i;
        sort(id.begin(), id.end(), [&](int l, int r) { return nums2[l] < nums2[r]; });
        int l = 0, r = size - 1;
        vector<int> ret(size);
        for (auto e : nums1) {
            if (e > nums2[id[l]]) ret[id[l++]] = e;
            else ret[id[r--]] = e;
        }
        return ret;
    }
};